
package org.japo.java.swing.igu;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.Image;
import java.net.URL;
import javax.swing.ComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import org.japo.java.swing.beans.PanelFondo;
import org.japo.java.swing.listeners.GEA;

public class IGU extends JFrame{
    
    // Componentes del IGU
    private JLabel lblPrueba;
    private JComboBox<JLabel> cbbFuente;
    
    // Valores predeterminados de fuente
    private final String FAMILIA = "Calibri";
    public final int ESTILO = Font.PLAIN;
    private final int TALLA = 40;
    
    // Recurso con la imagen de fondo del panel
    private final String RES_PKG = "/org/japo/java/resources/img";
    private final String RES_IMG = "fondo.jpg";
    private final String RECURSO = RES_PKG + "/" + RES_IMG;
    
    // Texto de prueba
    private final String TEXTO = "Érase una vez Java";
    
    public IGU(){
        iniciarComponentes();
    }
    
    public void iniciarComponentes(){

        // Panel principal
        JPanel pnlPrincipal = new JPanel();
        pnlPrincipal.setLayout(new GridLayout(2, 1));
        
        // Fuente de la etiqueta
        Font f = new Font(FAMILIA, ESTILO, TALLA);
        
        // Borde de etiqueta
        Border b = new BevelBorder(BevelBorder.LOWERED);
        
        // Etiqueta de prueba
        lblPrueba = new JLabel();
        lblPrueba.setFont(f);
        lblPrueba.setText(TEXTO);
        lblPrueba.setHorizontalAlignment(JLabel.CENTER);
        lblPrueba.setOpaque(true);
        lblPrueba.setBackground(Color.WHITE);
        lblPrueba.setBorder(b);
        pnlPrincipal.add(lblPrueba);
        
        // Imagen de fondo
        //URL urlImagen = getClass().getResource(RECURSO);
        //Image i = new ImageIcon(urlImagen).getImage();
        
        // Panel de control
        JPanel pnlControl = new JPanel();
        FlowLayout fl = new FlowLayout();
        fl.setVgap(30);
        pnlControl.setLayout(fl);
        pnlPrincipal.add(pnlControl);
        
        // Gesto de eventos de accion
        GEA gea = new GEA(this);
        
        // Obtener la lista de fuentes del sistema
        String[] listaFuentes = GraphicsEnvironment.
                getLocalGraphicsEnvironment().
                getAvailableFontFamilyNames();
        
        // Selector de fuentes
        cbbFuente = new JComboBox(listaFuentes);
        cbbFuente.setRenderer(new CambiaFuente());
        cbbFuente.setSelectedItem(FAMILIA);
        cbbFuente.setPreferredSize(new Dimension(300, 30));
        cbbFuente.addActionListener(gea);
        pnlControl.add(cbbFuente);

        // Ventana principal
        setTitle("Selección de fuente");
        setContentPane(pnlPrincipal);
        setResizable(false);
        setSize(400, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void procesarFuente(Object obj){
        
        // Convierte el objeto en JComboBox
        JComboBox<String> lista = (JComboBox<String>) obj;
        
        // Obtiene la familia seleccionada
        String familia = (String) lista.getSelectedItem();
        
        // Genera una nueva fuente
        Font f = new Font(familia, ESTILO, TALLA);
        
        // Aplica la fuente
        lblPrueba.setFont(f);
    }
}

class CambiaFuente extends JLabel implements ListCellRenderer<Object> {

    @Override
    public Component getListCellRendererComponent(JList<?> list,
                                                   Object value,
                                                   int index,
                                                   boolean isSelected,
                                                   boolean cellHasFocus) {
         String fuente = value.toString();
         Font f = new Font(fuente, Font.PLAIN, 18);
         setText(fuente);
         setFont(f);
            
         return this;
     }
 }
